package com.thread.sync.sync11;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

//jdk 内置futrue设计模式实现
public class UserFutrue implements Callable<String> { //指定有返回值string
    private String result;

    public UserFutrue(String result) {
        this.result = result;
    }

    //真实业务数据获取,执行可能很慢
    @Override
    public String call() throws Exception {
        //模拟执行业务耗时
        Thread.sleep(3000);
        return this.result + "处理完成,结果是.....";
    }

    public static void main(String[] args) throws Exception {
        String param = "姚振的存款";
        //构造FutureTask,传入业务处理类,改类需要实现callable接口
        FutureTask<String> future = new FutureTask<String>(new UserFutrue(param));
        //创建线程池执行future
        ExecutorService pool = Executors.newFixedThreadPool(1);
        //提交任务,开始执行业务类的call方法
        pool.submit(future);
        System.out.println("我要进行其他数据处理.....");
        try {
            //这里可以做额外的数据操作，也就是主程序执行其他业务逻辑
            Thread.sleep(2000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //调用获取数据方法,如果call()方法没有执行完成,则依然会进行等待
        System.out.println("数据：" + future.get());
        pool.shutdown();
    }

}
